package com.ding.practice.algorithm.leetcode.hot100;

/**
 * 力扣热题100之移动0
 * @ID = 283
 * @date 2024年07月11日19:37:43
 *
 *
 *给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
 *
 * 请注意 ，必须在不复制数组的情况下原地对数组进行操作。
 *
 *
 *
 * 示例 1:
 *
 * 输入: nums = [0,1,0,3,12]
 * 输出: [1,3,12,0,0]
 * 示例 2:
 *
 * 输入: nums = [0]
 * 输出: [0]
 */
public class MoveZeroes_283 {

    public static int[] moveZeroes(int[] nums) {
        // 解题思路
        /*
        使用双指针，一个指针记录非零的位置，一个指针记录已经排好的末端，一个记录待要处理的前端，遇到非零的进行交换，左指针加1
        再次理解：forNood走过的位置肯定都为0，要是不为0的话会和intcertNood指针的值做交换
         */
        int forNood = 0;
        int intcertNood = 0;
        int temp;
        while (forNood < nums.length){
            // 找到不为0的位置
            if (nums[forNood] != 0){
                // 如果指针位置一样，就不交换
                if (intcertNood != forNood){
                    // 交换
                    temp = nums[intcertNood];
                    nums[intcertNood] = nums[forNood];
                    nums[forNood] = temp;
                }
                // 左指针加1
                intcertNood ++;
            }
            forNood ++ ;
        }
        return nums;
    }

    public static void main(String[] args) {
        int[] nums = {1,6,0,3,5};
        moveZeroes(nums);
        System.out.println( );
    }
}
